package com.vates.vsp.servicios.reservas;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.vates.vsp.dao.DaoBaseReserva;
import com.vates.vsp.entidades.Reserva;
import com.vates.vsp.exceptions.ReservaNoExistException;
import com.vates.vsp.exceptions.ValidationException;
import com.vates.vsp.util.ValidadorCampos;

@Service(value = "reservaSrv")
public class ReservaServiceImpl implements ReservaService {
	
	@Autowired
	private DaoBaseReserva dao;

	@Override
	public void altaReserva(Reserva reserva) throws ValidationException {
		if (ValidadorCampos.validarReserva(reserva)) {
			dao.guardar(reserva);
		}
	}
	
	@Override
	public void actualizarReserva(Reserva reserva) throws ValidationException {
		if( ValidadorCampos.validarReserva(reserva) && dao.buscarPorId(reserva.getIdReserva()) != null)  {
			dao.guardar(reserva);
		}
	}

	@Override
	public void bajaReserva(Reserva reserva) throws ReservaNoExistException {
		if (reserva != null && dao.buscarPorId(reserva.getIdReserva()) != null) {
			dao.eliminar(reserva);
		} else
			throw new ReservaNoExistException();
	}

	@Override
	public Reserva buscarReservaPorId(Long id) throws ReservaNoExistException {
		if (dao.buscarPorId(id) != null)
			return dao.buscarPorId(id);
		else
			throw new ReservaNoExistException();
	}

	@Override
	public List<Reserva> buscarReservaPorHotel(Long idHotel,
			Date fechaInferior, Date fechaSuperior) {
		return dao.buscarPorNumeroHotel(idHotel, fechaInferior, fechaInferior);
	}

	@Override
	public List<Reserva> buscarReservaPorCliente(Long idCliente,
			Date fechaInferior, Date fechaSuperior) {
		return dao.buscarPorNumeroCliente(idCliente, fechaInferior,
				fechaSuperior);
	}

	@Override
	public List<Reserva> buscarTodasReservas() {
		return dao.buscarTodos();
	}

}
